const db = require("../db")
const bcryptjs = require("bcryptjs")
const getUserInfoSql =
  "select id, username, nickname, email, user_pic from users where id=?"

const updateUserSql = "update users set nickname=?, email=? where id=?"

const getUserPwdSql = "select password from users where id=?" // 查询当前用户的密码

const updatePwdSql = "update users set password=? where id=?"
const updateAvatarSql = "update users set user_pic=? where id=?"
module.exports = {
  getUserInfo(req, res) {
    // 如何拿到用户的id
    // express-jwt => token => 用户信息 => req.user这个对象上
    db.query(getUserInfoSql, req.user.id, function (err, result) {
      if (!err && result.length) {
        res.send({ message: "获取用户信息成功", status: 0, data: result[0] })
      } else {
        res.sendError(err ? err : "用户查不到")
      }
    })
  },

  updateUserInfo(req, res) {
    const { id, nickname, email } = req.body
    db.query(updateUserSql, [nickname, email, id], function (err, result) {
      if (!err) {
        // 还需要判断 更新到底是否成功
        if (result.affectedRows === 1) {
          // 表示受影响的有一行数据  => 更新成功啦
          res.send({ message: "用户基本信息更新成功", status: 0 })
        } else {
          res.sendError("用户基本信息更新失败")
        }
      } else {
        res.sendError(err)
      }
    })
  },
  updatePwd(req, res) {
    // 1. 先查 当前用户的 旧密码 和 传过来的旧密码进行比对 比对成功啦  就可以修改密码 比对不成功 就报错
    // 查当前用户的旧密码是什么
    // req.user.id => token => 解析出来的id
    db.query(getUserPwdSql, req.user.id, function (err, result) {
      if (!err && result.length) {
        const [{ password }] = result // 通过解构的方式 获取到 旧密码 存储的是加密的密码
        if (bcryptjs.compareSync(req.body.oldPwd, password)) {
          // 如果相等 表示 用户的输入的旧密码是正确的 此时可以修改密码
          // 此时说明 可以将用户的新密码 写入到数据库
          db.query(
            updatePwdSql,
            [bcryptjs.hashSync(req.body.newPwd, 10), req.user.id],
            function (error, data) {
              if (!error && data.affectedRows === 1) {
                // 此时此刻说明 没有错误 并且成功更新了一行数据 意味着更新密码成功
                res.send({ message: "重置密码成功", status: 0 })
              } else {
                res.sendError(error ? error : "更新密码失败")
              }
            }
          )
        } else {
          res.sendError("用户的旧密码输入错误")
        }
      } else {
        res.sendError(err ? err : "更新密码失败")
      }
    })
  },
  updateAvatar(req, res) {
    db.query(
      updateAvatarSql,
      [req.body.avatar, req.user.id],
      function (err, result) {
        if (!err && result.affectedRows === 1) {
          // 表示更新头像成功
          res.send({ message: "头像更新成功", status: 0 })
        } else {
          res.sendError(err ? err : "头像更新失败")
        }
      }
    )
  },
}
